home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0034_Convert Number to HEX.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  3KB  |  73 lines

  1. {
  2. LOU DUCHEZ
  3.  
  4. >does andbody know an easy way to convert a Byte value from it's Integer
  5. > notation to hex notatation?
  6.  
  7. Well, thank you For this message.  It finally got me off my keister (sp?) to
  8. Write a "decimal-to-hex" converter -- a project I'd been meaning to do, but
  9. never got around to.  (Technically, since I was in a seated position, I
  10. remained on my keister the whole time, but you know what I mean).  Actually,
  11. the following is not just "decimal-to-hex" -- it's decimal-to-any-base-from-
  12. 2-to-36-converter (because base 1 and below doesn't make sense, and after
  13. base 36 I run out of alphabet to represent "digits").  Here is NUBASE:
  14. }
  15.  
  16.  
  17. Function nubase(numin : LongInt; base, numplaces : Byte) : String;
  18. Var
  19.   tmpstr    : String;
  20.   remainder : Byte;
  21.   negatize  : Boolean;
  22. begin
  23.   negatize := (numin < 0);              { Record if it's a negative number }
  24.   if negatize then
  25.     numin := abs(numin);                { convert to positive For calcs }
  26.   tmpstr[0] := Char(numplaces);         { set length of the output String }
  27.  
  28.   While numplaces > 0 do
  29.   begin                                 { Loop: fills each space in String }
  30.     remainder := numin mod base;        { get next "digit" (under new base) }
  31.     if remainder > 9 then
  32.       tmpstr[numplaces] := Char(remainder + 64 - 9)   { convert to letter }
  33.      else
  34.       tmpstr[numplaces] := Char(remainder + 48);      { use number as is }
  35.     numin := numin div base;            { reduce dividend For next "pass" }
  36.     numplaces := numplaces - 1;         { go to "next" position in String }
  37.   end;                                  { end of loop }
  38.  
  39.   { The following: if we've run out of room on the String, or if it's a
  40.     negative number and there's not enough space For the "minus" sign,
  41.     convert the output String to all asterisks. }
  42.  
  43.   if (numin <> 0) or (negatize and (tmpstr[1] <> '0')) then
  44.     For numplaces := 1 to Byte(tmpstr[0]) do
  45.       tmpstr[numplaces] := '*';
  46.  
  47.   { add minus sign }
  48.  
  49.   if negatize and (tmpstr[1] = '0') then
  50.     tmpstr[1] := '-';
  51.  
  52.   nubase := tmpstr;
  53. end;
  54.  
  55.  
  56. {
  57. Feed it the number to convert, the base to convert into, and the number of
  58. spaces you want For it.  Leading zeros will be provided.  Example: to
  59. convert 111 into hex (base 16)  and give 4 digits of answer, you could say:
  60.  
  61. Writeln(nubase(111, 16, 4))
  62.  
  63. and it'd Write out:
  64.  
  65. 006F
  66.  
  67. This routine does handle negative numbers too.  if you don't give it enough
  68. "space" in the third parameter you pass, it'll return all asterisks.  For
  69. laughs, try converting the number 111 into base 10 and giving it 5 digits
  70. of answer.  You'll get:
  71.  
  72. 00111  (predictably enough)
  73. }